iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
自我挑戰組

一個月的演算法挑戰系列 第 6

Day06:資料結構 - 佇列(queue)

  • 分享至 

  • xImage
  •  

前言

今天聊到了佇列(queue)這種資料結構,佇列和Day5所提到的堆疊常放在一起看,他們的操作方式類似,但特性稍微有一點點的不同。


佇(ㄓㄨˋ)列(queue)

佇列是一種先進先出的資料結構(FIFO, First-In-First-Out),與堆疊不同(FILO),來看看下面圖片,會更容易理解這個資料結構。
https://ithelp.ithome.com.tw/upload/images/20210906/20128286TlmiKbDMfJ.png

用生活上的例子來解釋,就是排隊的概念,當你在一間餐廳排隊,你是隊伍中的最後一位顧客,餐廳有空位時,會先叫隊伍前端第一位客人入座,而非最後一位。

佇列的操作

和堆疊相同,可以使用陣列或串列操作佇列
FIFO特性的資料結構,會先處理最早的元素,主要使用下列兩種基本操作:

  1. enqueue:由最後端添加資料
  2. dequeue:由最前端刪除資料
import queue

# 先入先出
q = queue.Queue()
q.put(1)
print(q.get())
q.put(2)
print(q.get())
q.put(3)
print(q.get()) 

# 後入先出
q1 = queue.LifoQueue()
q1.put(2)
print(q1.get())
q1.put(4)
print(q1.get())
q1.put(6)
print(q1.get())

# 優先順序
q2 = queue.PriorityQueue()
q2.put("a")
print(q2.get())
q2.put("b")
print(q2.get())
q2.put("c")
print(q2.get()) #會先出前面的資料

環狀佇列

環狀佇列是一種環狀結構的佇列,最多使用(n-1)個空間。環狀佇列顧名思義就是一個環形的佇列,可以使用isQueueEmpty()查詢是否還有資料可取出?

https://ithelp.ithome.com.tw/upload/images/20210906/20128286Sy1mvKpG3L.png

參考資料

Python關於佇列操作的延伸閱讀

https://docs.python.org/3/library/queue.html


上一篇
Day05:資料結構 - 堆疊(Stack)
下一篇
Day07:資料結構 - 雜湊表(Hash Table)
系列文
一個月的演算法挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言